/**
 * 用户管理模块配置文件
 * @module UserConfig
 */

/** 模块名称 */
export const moduleName = '用户'
/** API 接口路径 */
export const moduleApi = '/api/user'
// export const moduleApi = '/api/employees'

/**
 * 用户信息接口
 * @interface User
 */
export interface User {
  /** 用户ID */
  id: number
  /** 账号 */
  username: string
  /** 姓名 */
  name: string | null
  /** 邮箱 */
  email: string | null
  /** 手机号 */
  mobile: string | null
  /** 性别 1-男 2-女 */
  sex: string
  /** 头像 */
  avatar: string | null
  /** 描述 */
  desc: string | null
  /** 是否启用 */
  isEnabled: boolean
  /** 是否超级管理员 */
  isSuper: boolean
  /** 部门ID */
  deptId: number | null
  /** 部门名称 */
  dept: string | null
  /** 职务ID */
  roleId: number | null
  /** 职务名称 */
  role: string | null
  /** 员工ID */
  employeesUserId: string
  /** 微信openid */
  openid: string | null
  /** 密码 */
  password: string
  /** 明文密码 */
  patencyPassword: string
  /** 创建时间 */
  createdAt: string
  /** 更新时间 */
  updatedAt: string
  /** 职务中间表数据 */
  postsMiddle: string | number[]
  /** 职务ID */
  postsId?: string | number[]
  /** 所属平台 1:红有 2:本系统 */
  platformBelong?: string | number
  /** 是否管理员 */
  isManager?: boolean
}

/**
 * 表格列配置
 * @description 配置表格显示的列
 * @property {string} label - 列标题
 * @property {string} prop - 对应数据字段
 * @property {number} minWidth - 最小列宽
 * @property {Object} [dictionary] - 字典映射，用于值的转换显示
 * @example
 * {
 *   label: '性别',
 *   prop: 'sex',
 *   minWidth: 80,
 *   dictionary: {
 *     '1': '男',
 *     '2': '女'
 *   }
 * }
 */
const tableColumns = ref<any>([
  {
    label: '账号',
    prop: 'username',
    minWidth: 150,
  },
  {
    label: '密码',
    prop: 'patencyPassword',
    minWidth: 150,
  },
  {
    label: '姓名',
    prop: 'name',
    minWidth: 100,
  },
  {
    label: '人脸管理',
    prop: 'id',
    component: 'FaceManage',
    componentProps: (row: any) => ({
      id: row.id,
    }),
  },
  {
    label: '手机号',
    prop: 'mobile',
    minWidth: 120,
  },
  {
    label: '邮箱',
    prop: 'email',
    minWidth: 180,
  },
  {
    label: '部门',
    prop: 'dept.name',
    minWidth: 120,
  },
  {
    label: '职务',
    prop: 'postsMiddle',
    minWidth: '100px',
    component: 'Tags',
    format: (row: any) => {
      if (!row.postsMiddle) return []
      return Array.isArray(row.postsMiddle)
        ? row.postsMiddle.map((item: any) => {
            // 如果是完整的职务对象
            if (item.posts && item.posts.name) {
              return item.posts.name
            }
            // 如果直接是职务对象
            if (item.name) {
              return item.name
            }
            return '-'
          })
        : []
    },
  },
  {
    label: '性别',
    prop: 'sex',
    minWidth: 80,
    dictionary: {
      '1': '男',
      '2': '女',
    },
  },
  {
    label: '状态',
    prop: 'isEnabled',
    minWidth: 80,
    dictionary: {
      true: '启用',
      false: '禁用',
    },
  },
  {
    label: '创建时间',
    prop: 'createdAt',
    minWidth: 160,
  },
  {
    label: '更新时间',
    prop: 'updatedAt',
    minWidth: 160,
  },
])

/**
 * 搜索参数配置
 * @description 配置搜索表单的字段
 * @property {string} label - 表单项标签
 * @property {string} prop - 对应数据字段
 * @property {string} component - 使用的组件类型
 * @property {string} placeholder - 占位提示文本
 * @example

 *
 * 支持的组件类型：
 * - input: 输入框
 * - select: 下拉选择框
 * - TreeSelect: 树形选择器
 * - date: 日期选择器
 * - daterange: 日期范围选择器
 */
const searchParams = ref<any>([
  {
    label: '账号',
    prop: 'username',
    component: 'input',
    placeholder: '请输入账号',
  },
  {
    label: '姓名',
    prop: 'name',
    component: 'input',
    placeholder: '请输入姓名',
  },
  {
    label: '手机号',
    prop: 'mobile',
    component: 'input',
    placeholder: '请输入手机号',
  },
])

/**
 * 添加/编辑表单配置
 * @description 配置添加和编辑表单的字段
 * @property {string} label - 表单项标签
 * @property {string} prop - 对应数据字段
 * @property {string} [component] - 使用的组件类型
 * @property {Array} [rules] - 验证规则
 * @property {any} [defaultValue] - 默认值
 * @property {Array} [options] - 选项数据（用于 select 组件）
 * @property {string} [placeholder] - 占位提示文本
 * @example
 *
 * 支持的组件类型：
 * - input: 输入框
 * - select: 下拉选择框
 * - TreeSelect: 树形选择器
 * - switch: 开关
 * - textarea: 文本域
 * - date: 日期选择器
 * - upload: 文件上传
 */
const addParams = ref<any>([
  {
    label: '账号',
    prop: 'username',
    component: 'input',
    placeholder: '请输入账号',
    required: true,
    rules: [{ required: true, message: '请输入账号' }],
  },
  {
    label: '姓名',
    prop: 'name',
    component: 'input',
    placeholder: '请输入姓名',
    required: true,
    rules: [{ required: true, message: '请输入姓名' }],
  },
  {
    label: '手机号',
    prop: 'mobile',
    component: 'input',
    placeholder: '请输入手机号',
    required: true,
    rules: [
      { required: true, message: '请输入手机号' },
      { pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号' },
    ],
  },
  {
    label: '邮箱',
    prop: 'email',
    component: 'input',
    placeholder: '请输入邮箱',
    rules: [{ type: 'email', message: '请输入正确的邮箱地址' }],
  },
  {
    label: '性别',
    prop: 'sex',
    component: 'select',
    placeholder: '请选择性别',
    options: [
      { label: '男', value: '1' },
      { label: '女', value: '2' },
    ],
    defaultValue: '1',
    rules: [{ required: true, message: '请选择性别' }],
  },
  {
    label: '所属平台',
    prop: 'platformBelong',
    component: 'select',
    placeholder: '请选择所属平台',
    options: [
      { label: '红有', value: '1' },
      { label: '本系统', value: '2' },
    ],
    defaultValue: '2',
    required: true,
    disabled: true,
    rules: [{ required: true, message: '请选择所属平台' }],
  },
  {
    label: '部门',
    prop: 'deptId',
    component: 'TreeSelect',
    placeholder: '请选择部门',
    required: true,
    rules: [{ required: true, message: '请选择部门' }],
  },
  {
    label: '职务',
    prop: 'postsMiddle',
    component: 'DutySelect',
    placeholder: '请选择职务',
    // required: true,
    format: (value: any) => {
      if (!value) return []
      if (Array.isArray(value)) {
        return value
          .map((item: any) => {
            console.log('职务项处理:', item)
            // 如果是编辑时的完整对象
            if (typeof item === 'object' && item.posts) {
              return Number(item.posts.id)
            }
            // 如果是对象但没有 posts
            if (typeof item === 'object' && item.postsId) {
              return Number(item.postsId)
            }
            if (typeof item === 'object' && item.id) {
              return Number(item.id)
            }
            // 如果直接是数字
            return Number(item)
          })
          .filter(Boolean)
      }
      return []
    },
    transform: (value: any) => {
      if (!value) return []
      if (Array.isArray(value)) {
        return value
          .map((item) => {
            if (typeof item === 'object') {
              if (item.posts) {
                return Number(item.posts.id)
              }
              if (item.postsId) {
                return Number(item.postsId)
              }
              if (item.id) {
                return Number(item.id)
              }
            }
            return Number(item)
          })
          .filter(Boolean)
      }
      return []
    },
    transformBack: (value: any) => {
      if (!value) return []
      if (Array.isArray(value)) {
        return value
          .map((item) => {
            if (typeof item === 'object' && item.posts) {
              return Number(item.posts.id)
            }
            if (typeof item === 'object' && item.postsId) {
              return Number(item.postsId)
            }
            return Number(item)
          })
          .filter(Boolean)
      }
      return []
    },
  },
  {
    label: '是否管理员',
    prop: 'isManager',
    component: 'switch',
    defaultValue: false,
  },
  {
    label: '状态',
    prop: 'isEnabled',
    component: 'switch',
    defaultValue: true,
    rules: [{ required: true, message: '请选择状态' }],
  },
  {
    label: '描述',
    prop: 'desc',
    component: 'textarea',
    placeholder: '请输入描述信息',
  },
])

export { addParams, searchParams, tableColumns }
